#include <iostream>
#include <vector>
#include <pthread.h>
#include <unistd.h>

//用户个数
#define UserNum 20

//总票数
long TicketNum = 10;

//线程调用的函数
void* GetTicket(void* args){
    //获取线程的编号
    long int user_id = reinterpret_cast<long>(args);

    if(TicketNum > 0){//剩余票
        usleep(10000);//10毫秒

        //获取余票
        TicketNum--;

        printf("User : %ld 抢到票！余票：%ld\n", user_id, TicketNum);
    }else{
        printf("没有余票了！\n");
    }

    return nullptr;
}

int main(){
    printf("------------- 抢票开始 -------------\n");

    std::vector<pthread_t> Threads(20);//二十个人一起抢票

    //创建线程
    for(long i = 1; i <= UserNum; i++){
        pthread_create(&Threads[i - 1], nullptr, GetTicket, reinterpret_cast<void*>(i));
    }

    //等待所有的线程
    for(long i = 1; i <= UserNum; i++){
        pthread_join(Threads[i - 1], nullptr);
    }

    printf("------- 抢票结束！余票为: %ld -------\n", TicketNum);
    return 0;
}
